#include<cstdio>
#include<cstring>
int sont[6001],son[6001][401],f[6001][2],fa[6001];
bool vi[6001];
int n;
int max(int x,int y)
{
	return x>y?x:y;
}
void dfs(int p)
{
	if(sont[p]==0)
	{
		vi[p]=true;
		return ;
	}
	for(int i=1;i<=sont[p];i++)
	{
		if(!vi[son[p][i]]) dfs(son[p][i]);
		f[p][0]+=max(f[son[p][i]][1],f[son[p][i]][0]);
		f[p][1]+=f[son[p][i]][0];
	}
	vi[p]=true;
}
int main()
{
	freopen("test.in","r",stdin);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		int v;
		scanf("%d",&v);
		f[i][1]=v;
		f[i][0]=0;
	}
	memset(sont,0,sizeof(sont));
	memset(fa,0,sizeof(fa));
	memset(vi,0,sizeof(vi));
	int a,b;
	while(scanf("%d%d",&a,&b),a!=0)
	{
		sont[b]++;
		son[b][sont[b]]=a;
		fa[a]=1;
	}
	for(int i=1;i<=n;i++)
		if(!fa[i])
		{
			dfs(i);
			printf("%d\n",max(f[i][1],f[i][0]));
		}
	return 0;
}

